package com.ckr.controller;

import com.ckr.pojo.User;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
//import org.springframework.stereotype.Controller;
import com.fasterxml.jackson.databind.SerializationFeature;
import org.springframework.web.bind.annotation.RequestMapping;
//import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

/**
 * @author Shadowckr
 * @create 2022-01-02 17:50
 */

/*
返回json字符串统一解决
在类上直接使用 @RestController，这样子，里面所有的方法都只会返回 json 字符串了，不用再每一个都添加@ResponseBody！
我们在前后端分离开发中，一般都使用@RestController，十分便捷！
 */
//@Controller
@RestController
public class UserController {
    //produces:指定响应体返回类型和编码
    @RequestMapping(value = "/json1", produces = "application/json;charset=utf-8")
//    @ResponseBody
    public String json1() throws JsonProcessingException {
        //创建一个jackson的对象映射器，用来解析数据
        ObjectMapper mapper = new ObjectMapper();
        //创建一个对象
        User user = new User("凯德1号", 18, "男");
        //将我们的对象解析成为json格式
//        String str = mapper.writeValueAsString(user);
//        return str;
        //由于@ResponseBody注解，这里会将str转成json格式返回而不走视图解析器；十分方便
        return mapper.writeValueAsString(user);
    }
    //{"name":"凯德1号","age":18,"sex":"男"}

    //乱码统一解决
    @RequestMapping("/json2")
//    @ResponseBody
    public String json2() throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        User user = new User("凯德2号", 19, "男");
        //由于@ResponseBody注解，这里会将str转成json格式返回而不走视图解析器；十分方便
        return mapper.writeValueAsString(user);
    }
    //{"name":"凯德2号","age":19,"sex":"男"}

    //测试集合输出
    @RequestMapping("/json3")
    public String json3() throws JsonProcessingException {
        //创建一个jackson的对象映射器，用来解析数据
        ObjectMapper mapper = new ObjectMapper();
        //创建对象
        User user1 = new User("凯德3号", 20, "男");
        User user2 = new User("凯德4号", 21, "男");
        User user3 = new User("凯德5号", 22, "男");
        User user4 = new User("凯德6号", 23, "男");
        List<User> list = new ArrayList<User>();
        list.add(user1);
        list.add(user2);
        list.add(user3);
        list.add(user4);

        //将我们的对象解析成为json格式
        return mapper.writeValueAsString(list);
    }
    //[{"name":"凯德3号","age":20,"sex":"男"},{"name":"凯德4号","age":21,"sex":"男"},
    // {"name":"凯德5号","age":22,"sex":"男"},{"name":"凯德6号","age":23,"sex":"男"}]

    //输出时间对象
    @RequestMapping("/json4")
    public String json4() throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        //创建时间一个对象，java.util.Date
        Date date = new Date();
        //将我们的对象解析成为json格式
        return mapper.writeValueAsString(date);
    }
    //1641119028584
    //默认日期格式会变成一个数字，是1970年1月1日到当前日期的毫秒数！Jackson默认是会把时间转成timestamps形式。

    //取消timestamps形式，自定义时间格式
    @RequestMapping("/json5")
    public String json5() throws JsonProcessingException {
        ObjectMapper mapper = new ObjectMapper();
        //不使用时间戳的方式
        mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
        //自定义日期格式对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //指定日期格式
        mapper.setDateFormat(sdf);

        Date date = new Date();
        return mapper.writeValueAsString(date);
    }
    //"2022-01-02 18:24:01"

}
